package com.chuhe.starry.service;

import com.chuhe.common.domain.dto.TokenUserInfoDto;
import com.chuhe.common.domain.entity.GroupInfo;
import com.chuhe.common.domain.enums.MessageTypeEnum;
import com.chuhe.common.domain.query.PaginationResultVO;
import com.chuhe.common.domain.vo.req.AdminLoadGroupReq;
import com.chuhe.common.domain.vo.resp.ApiResult;
import com.chuhe.common.domain.vo.resp.LoadGroupResp;
import com.chuhe.common.domain.vo.resp.LoadGroupSessionResp;
import com.chuhe.common.domain.vo.resp.SaveGroupReq;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 张楚河
 * @since 2025-05-12
 */
public interface GroupInfoService {
    /**
     * 创建群组
     * @Author: 楚河
     * @Date: 2025-05-13 18:16
     */
    ApiResult<?> saveGroup(SaveGroupReq req, TokenUserInfoDto tokenUserInfo);
    /**
     * 获取群组
     * @Author: 楚河
     * @Date: 2025-05-14 16:10
     */
    List<LoadGroupResp> loadMyGroup(String userId);
    /**
     * 获取群组详情
     * @Author: 楚河
     * @Date: 2025-05-14 19:15
     */
    LoadGroupResp getGroupDetail(String userId, String groupId);
    /**
     * 加载群组会话
     * @Author: 楚河
     * @Date: 2025-05-14 20:04
     */
    LoadGroupSessionResp getGroupInfo4Chat(String userId, String groupId);
    /**
     * 查询所有群组 分页
     * @Author: 楚河
     * @Date: 2025-05-18 14:14
     */
    PaginationResultVO<GroupInfo> findListByPage(AdminLoadGroupReq req);
    /**
     * 解散群组
     * @Author: 楚河
     * @Date: 2025-05-18 14:29
     */
    void dissolutionGroup(String userId, String groupId);
    /**
     * 拉人或踢人
     * @Author: 楚河
     * @Date: 2025-05-24 17:21
     */
    void addOrRemoveGroupUser(TokenUserInfoDto tokenUserInfo, String groupId, String selectContacts, Integer opType);
    /**
     * 移除
     * @Author: 楚河
     * @Date: 2025-05-24 17:24
     */
    void leaveGroup(String contactId, String groupId, MessageTypeEnum removeGroup);

}
